#include <iostream>
#include <cstring>  // 用于 memcpy
#include <cassert>

// 指定结构体的对齐为 1 字节，以避免自动填充
#pragma pack(push, 1)
struct MyData {
    int id;
    double value;
    char name[10];
};
#pragma pack(pop)

int main() {
    // 假设我们从文件或网络读取了以下二进制数据
    unsigned char buffer[] = {
        0x01, 0x00, 0x00, 0x00,             // int (1)
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3F, // double (1.0)
        'e', 'x', 'a', 'm', 'p', 'l', 'e', '\0', '\0', '\0' // char[10] ("example")
    };

    // 确保 buffer 的大小与 MyData 结构体大小相匹配
    static_assert(sizeof(buffer) == sizeof(MyData), "Size of buffer does not match size of structure");

    // 将 buffer 的内容转换为 MyData 结构体
    MyData* data = reinterpret_cast<MyData*>(buffer);

    // 输出转换后的结构体内容
    std::cout << "ID: " << data->id << std::endl;
    std::cout << "Value: " << data->value << std::endl;
    std::cout << "Name: " << data->name << std::endl;

    return 0;
}